package com.ynet.middleground.contract.service;

import java.util.List;

import javax.validation.Valid;

import com.ynet.core.common.ServiceResult;
import com.ynet.middleground.contract.bean.*;
import com.ynet.middleground.contract.dto.ContractDto;
import com.ynet.middleground.contract.dto.ContractNoDTO;
import com.ynet.middleground.contract.dto.NewContractDto;

/**
 * @author daigaole
 * @description 合约管理服务接口
 * @date 2020-03-16
 */
public interface ContractManagementService {
    /**
     * 新建合约服务
     * 
     * @param requestObj 合约新建请求对象
     * @return 合约id
     * @author daigaole
     */
    ServiceResult<NewContractDto> newContract(@Valid NewContractReq requestObj);

    /**
     * 查询合约服务
     * 
     * @param requestObj 查询合约服务
     * @return 合约信息
     * @author daigaole
     */
    ServiceResult<List<ContractDto>> queryContract(@Valid QueryContractReq requestObj);

    /**
     * 查看关联合约
     * 
     * @param requestObj 查询合约服务
     * @return
     */
    ServiceResult<List<ContractDto>> queryRelationContract(QueryRelationContractReq requestObj);

    /**
     * 修改合约服务
     * 
     * @param requestObj 修改合约服务
     * @return 合约信息
     * @author daigaole
     */
    ServiceResult<String> modifyContract(@Valid ModifyContractReq requestObj);

    /**
     * 变更合约服务
     * 
     * @param requestObj 变更合约服务
     * @return 合约信息
     * @author daigaole
     */
    ServiceResult<NewContractDto> changeContract(@Valid ChangeContractReq requestObj);

    /**
     * 结束合约服务
     * 
     * @param requestObj 结束合约服务
     * @return 合约信息
     * @author daigaole
     */
    ServiceResult<String> overContract(@Valid OverContractReq requestObj);

    /**
     * 删除合约服务
     * 
     * @param requestObj 删除合约服务
     * @return 合约信息
     * @author daigaole
     */
    ServiceResult<String> deleteContract(@Valid DeleteContractReq requestObj);

    /**
     * 更新合约状态服务
     * 
     * @param requestObj 更新合约状态服务
     * @return 合约信息
     * @author daigaole
     */
    ServiceResult<String> modifyContractStatus(@Valid ModifyContractStatusReq requestObj);

    /**
     * 确认提交合约
     * 
     * @param requestObj 确认提交合约
     * @return 合约信息
     * @author daigaole
     * @modifyAuthor liulx
     * @modifyDescription 该接口暂无使用场景
     */
    // ServiceResult<ContractSubmissionDto> confirmationContractSubmission(@Valid ContractSubmissionReq requestObj);

    /**
     * 更新合约签署后文件地址
     *
     * @param req 更新合约签署后文件地址请求信息
     * @return 结果标志，以 success 字段值标识 true/false
     */
    ServiceResult<Object> updateContractSignedOssPath(@Valid UpdateContractSignedPathReq req);

    /**
     * 生成合约编号
     * 
     * @param req 基础请求参数对象
     * @return 合约编号
     * @author liulx
     * @date 2020-12-02 10:25:29
     */
    ServiceResult<ContractNoDTO> generateContarctNo(@Valid GenerateContractNoReq req);

}
